// Grunt 的入口文件
// 用于定义一些需要 Grunt 自动执行的任务
// 需要导出一个函数
// 此函数接收一个 Grunt 的形参，grunt 是一个对象，提供一些创建任务时可以用到的 API

module.exports = grunt => {
    // 借助registerTask方法，注册一个任务,该方法第一个参数是任务名称、第二个参数是任务描述、第三个是任务函数
    // 任务描述可以通过命令：`yarn grunt --help` 查看
    grunt.registerTask('foo', () => {
        console.log('hellon grunt')  
    })
    grunt.registerTask('bar', '任务描述', () => {
        console.log('other task')  
    })


    // 执行yarn grunt --help后，输出：
    // Available tasks
    //        foo  Custom task.

    //        bar  任务描述

    // 如果任务名称为default，运行的时候就不需要指定任务名称： ：`yarn grunt`
    // 一般使用default映射其他任务，通过第二个参数传入数组任务名的方式

    // grunt.registerTask('default', () => {
    //     console.log('default task')  
    // })

    grunt.registerTask('default', ['foo', 'bar'])

    //异步任务
    // grunt默认支持同步模式，如果要异步操作，需使用this.async方法得到一个回调函数，在异步操作后调用此函数，标识这个任务已经完成
    // 因为在函数当中需要使用this，就不能使用箭头函数
    grunt.registerTask('async-task', function () {
        const done = this.async()
        setTimeout(() => {
            console.log('async task working')
            done() // 调用回调函数，标识任务已完成
        }, 1000)
    })
}